// webrtc.js

import io from 'socket.io-client';

// 假设您已经有了配置对象 configuration 和信令服务器 URL
const configuration = { /* ... */ };
const signalingServerUrl = 'https://your-signaling-server-url';

let peerConnection = null;
let socket = null;

// 初始化 WebRTC 连接和信令服务器
async function initializeWebRTC() {
  peerConnection = new RTCPeerConnection(configuration);

  // 连接信令服务器
  socket = io(signalingServerUrl);

  // 监听 ICE 候选者事件
  peerConnection.onicecandidate = event => {
    if (event.candidate) {
      socket.send(JSON.stringify({
        type: 'candidate',
        candidate: event.candidate
      }));
    }
  };

  // 监听信令服务器消息
  socket.on('message', async (data) => {
    const message = JSON.parse(data);
    handleIncomingMessage(message);
  });
}

// 处理从信令服务器接收到的消息
async function handleIncomingMessage(message) {
  if (message.type === 'offer' || message.type === 'answer') {
    try {
      await peerConnection.setRemoteDescription(new RTCSessionDescription(message));
      // 如果是 offer，则创建并发送 answer
      if (message.type === 'offer') {
        await sendAnswer();
      }
    } catch (error) {
      console.error('设置远程描述失败:', error);
    }
  } else if (message.type === 'candidate') {
    try {
      await peerConnection.addIceCandidate(new RTCIceCandidate(message.candidate));
    } catch (error) {
      console.error('添加 ICE 候选者失败:', error);
    }
  }
}

// 创建并发送 offer
async function sendOffer() {
  try {
    const offer = await peerConnection.createOffer();
    await peerConnection.setLocalDescription(offer);
    socket.send(JSON.stringify({
      type: 'offer',
      sdp: offer
    }));
  } catch (error) {
    console.error('创建并发送 offer 失败:', error);
  }
}

// 创建并发送 answer
async function sendAnswer() {
  try {
    const answer = await peerConnection.createAnswer();
    await peerConnection.setLocalDescription(answer);
    socket.send(JSON.stringify({
      type: 'answer',
      sdp: answer
    }));
  } catch (error) {
    console.error('创建并发送 answer 失败:', error);
  }
}

// 导出初始化函数（或其他需要的函数）
export { initializeWebRTC, sendOffer };

// 在您的主应用文件（如 index.js）中调用 initializeWebRTC
// import { initializeWebRTC, sendOffer } from './webrtc';
// initializeWebRTC();
// // 根据需要调用 sendOffer()
